//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift Collections open source project
//
// Copyright (c) 2023 - 2024 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
//
//===----------------------------------------------------------------------===//


// #############################################################################
// #                                                                           #
// #            DO NOT EDIT THIS FILE; IT IS AUTOGENERATED.                    #
// #                                                                           #
// #############################################################################



// In single module mode, we need these declarations to be internal,
// but in regular builds we want them to be public. Unfortunately
// the current best way to do this is to duplicate all definitions.
#if COLLECTIONS_SINGLE_MODULE
/// Returns `x` as its concrete type `U`, or `nil` if `x` has a different
/// concrete type.
///
/// This cast can be useful for dispatching to specializations of generic
/// functions.
@_transparent
@inlinable
internal func _specialize<T, U>(_ x: T, for: U.Type) -> U? {
  // Note: this was ported from recent versions of the Swift stdlib.
  guard T.self == U.self else {
    return nil
  }
  return _identityCast(x, to: U.self)
}
#else // !COLLECTIONS_SINGLE_MODULE
/// Returns `x` as its concrete type `U`, or `nil` if `x` has a different
/// concrete type.
///
/// This cast can be useful for dispatching to specializations of generic
/// functions.
@_transparent
@inlinable
public func _specialize<T, U>(_ x: T, for: U.Type) -> U? {
  // Note: this was ported from recent versions of the Swift stdlib.
  guard T.self == U.self else {
    return nil
  }
  return _identityCast(x, to: U.self)
}
#endif // COLLECTIONS_SINGLE_MODULE
